/*
 * Università degli Studi di Trento
 * Facoltà di Scienze MM.FF.NN.
 * Corso di Laurea Triennale in Informatica
 * A.A. 2010/2011
 * Progetto per il corso di Sistemi Operativi 1
 * Progetto 4: simulazione di una rotonda
 * Autori:
 *  Abram Lorenzo - 140368
 *  Dal Lago Loris - 139428
 *  Florio Alessandro - 140245
 */

/********************************************************************************
  Header comune a tutte le componenti del programma, contiene definizioni di
  tipi e macro di utilizzo comune come il tipo bool, le funzioni di allocazione
  e deallocazione della memoria (new, delete..) e le funzioni di segnalazione
  degli errori
********************************************************************************/

#ifndef COMMON_H
#define COMMON_H

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <pthread.h>

// file descriptor and FIFO libraries:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

typedef enum {false, true} bool;


#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)

#define new(type) (type *) malloc(sizeof(type))
#define new_vector(type, dim) (type *) malloc(sizeof(type)*dim)
#define delete(var) free(var)

#define throw_error(funcName, errMsg) { \
    fprintf(stderr, "An error occurred in %s: %s\n", funcName, errMsg); \
    exit(-1); \
  }

#define throw_error_ends_with_int(funcName, errMsg, integer) {	\
    fprintf(stderr, "An error occurred in %s: %s %d\n", funcName, errMsg, integer); \
    exit(-1); \
  }

#define throw_error_ends_with_str(funcName, errMsg, string) {	\
    fprintf(stderr, "An error occurred in %s: %s %s\n", funcName, errMsg, string); \
    exit(-1); \
  }

#define streq(a,b) (strcmp(a,b) == 0)

#define logFile_name "/tmp/round.log"
#define streamingFile_name "/tmp/streaming.txt"

#define String_DIM 80
#define Baut_LEN 12

//#define DEBUG
//#define DEBUG_CAMERA

#endif /* COMMON_H */
